package com.chinawayltd.ews.sample.service.task;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.chinawayltd.ews.sample.model.TTaskNode;
import com.chinawayltd.ews.sample.model.task.TaskMaterielVO;
import com.chinawayltd.ews.sample.model.task.TaskNodeVO;
import com.chinawayltd.ews.sample.model.task.TaskOrderNodeVO;
/**
 * @program: greeProject
 * @description 运输任务节点service
 * @author: chenxin
 * @create: 2018年4月27日 下午6:01:37
 */
public interface TaskNodeService {

	/**
	 * 查询任务的节点列表
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param taskId
	 * @return
	 */
	List<TaskNodeVO> getTaskNodeList(Long taskId) throws Exception;
	/**
	 * 根据订单id串和站点id查询站点对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param ids
	 * @param startPlaceId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByBranchId(String[] ids, Long startPlaceId) throws Exception;

	/**
	 * 根据节点id查询站点对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param nodeId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeId(Long nodeId) throws Exception;
	
	/**
	 * 查询任务节点
	 * @author: chenxin
	 * @date: 2018年5月8日 下午2:40:08
	 * @param nodeId
	 * @return
	 */
	TTaskNode getById(Long nodeId) throws Exception;
	/**
	 * 根据节点对象查询未完成的前节点
	 * @author: chenxin
	 * @date: 2018年5月12日 下午1:51:24
	 * @param node
	 * @return
	 */
	List<TTaskNode> getBeforeNode(TTaskNode node) throws Exception;
	/**
	 * 查询节点
	 * @author: chenxin
	 * @date: 2018年5月12日 下午3:34:11
	 * @param nodeId
	 * @return
	 */
	TaskNodeVO getTaskNodeVOById(Long nodeId);
	
	/**
	 * 通过节点查询订单
	 * @author: chenxin
	 * @date: 2018年5月12日 下午4:00:23
	 * @param nodeId
	 * @return
	 * @throws Exception
	 */
	List<TaskOrderNodeVO> getNodeOrderByNodeId(@Param("nodeId")Long nodeId) throws Exception;
	
	/**
	 * 对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param nodeId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeIdAndOrderId(@Param("nodeId")Long nodeId, @Param("orderId")Long orderId);
	/**
	 * 通过任务id删除节点
	 * @author: chenxin
	 * @date: 2018年5月14日 下午4:16:14
	 * @param id
	 */
	int deleteNoteByTaskId(Long id) throws Exception;
	/**
	 * 根据任务id和站点类型查询节点与订单信息
	 * @author: chenxin
	 * @date: 2018年5月14日 下午7:18:32
	 * @param taskId
	 * @param branchType
	 * @return
	 */
	List<TaskNodeVO> getOrderDetailByTaskAndBranch(Long taskId, String branchType) throws Exception;
	/**
	 * 查询组合节点的货物明细
	 * @author: chenxin
	 * @date: 2018年5月14日 下午7:25:28
	 * @param ids
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeIds(String[] ids, String orderNo) throws Exception;
	/**
	 * 判断当前任务所有节点是否都已完成,空表示此任务除去最终的一个完成类型外的节点都已完成
	 * @author: chenxin
	 * @date: 2018年5月15日 下午5:30:17
	 * @param taskId
	 * @return
	 * @throws Exception
	 */
	List<TTaskNode> getNoFinishNode(Long taskId) throws Exception;
	
	/**
	 * 修改任务节点执行状态（未修改实际完成时间）
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int updateTaskNodeByNodeIdAndStatus(Integer i, Long id, Date date) throws Exception;
	
	/**
	 * 任务节点执行完成（修改实际完成时间）
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int completeTaskNodeByNodeIdAndStatus(Integer i, Long id, Date date) throws Exception;
	/**
	 * 修改装卸货开始时间
	 * @author: chenxin
	 * @date: 2018年5月15日 下午9:33:59
	 * @param nodeId
	 * @param date
	 * @return
	 */
	int updateNodeExTendByNodeId(Long nodeId, Date date) throws Exception;
	/**
	 * 修改装卸货完成时间
	 * @author: chenxin
	 * @date: 2018年5月15日 下午9:34:03
	 * @param nodeId
	 * @param date
	 * @return
	 */
	int completeNodeExTendByNodeId(Long nodeId, Date date) throws Exception;
	
	/**
	 * 删除任务的装卸货节点
	 * @author: chenxin
	 * @date: 2018年5月18日 上午11:08:06
	 * @param id
	 * @return
	 * @throws Exception
	 */
	int deleteTaskNoteExtendByTaskId(@Param("id")Long id) throws Exception;
	
	/**
	 * 删除任务节点对应的订单关联
	 * @author: chenxin
	 * @date: 2018年5月18日 上午11:08:06
	 * @param id
	 * @return
	 * @throws Exception
	 */
	int deleteNoteOrderByTaskId(@Param("id")Long id) throws Exception;
	/**
	 * 添加任务节点的实际完成时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:34:20
	 * @param nodeId
	 * @param date
	 */
	void updateNodeActualFinishTimeByNodeId(Long nodeId, Date date);
	/**
	 * 根据任务id和节点类型完成节点
	 * @author: chenxin
	 * @date: 2018年6月15日 下午5:49:36
	 * @param i
	 * @param taskId
	 * @param date
	 */
	void completeTaskNodeByTaskIdAndNodeType(int i, Long taskId, Date date);
	
	/**
	 * 卸货节点所有订单所有电梯口
	 * @author: chenxin
	 * @date: 2018年7月3日 下午4:49:42
	 * @param nodeId
	 * @return
	 */
	Map<String, Object> getNodeTotalLiftByNodeId(Long nodeId);
}
